在今天的文章一開始,我們先看一些經典的 Convolution Network (CNN) 架構,以瞭解 CNN 對於電腦視覺研究的貢獻。經典的網路包括了:LeNet-5, AlexNet 和 VGG-16。可由下圖,看這三個網路的發展與架構:
LeNet-5 是 CNN 的發明者 Yann LeCun 所建構,也是第一個 CNN。其訓練影像為 32x32 的灰階手寫影像,也是電腦視覺影像中的入門影像資料集,通稱為 MNIST。LeNet-5 的架構受限於當時的計算能力,在現在看來顯得相當嬌小,但卻奠定了現在 CNN 架構的基礎,尤其 LeNet-5 使用了 Convolution layer 後,接著一個 pooling layer 這樣的架構,更是現代 CNN 架構常用的基石。
AlexNet 則是喚起類神經網路之冬的第一聲春雷。自從 AlexNet 在 2012 的 ILSVRC 大賽中拔得頭籌後,深度學習的炫風便開始席捲電腦視覺的領域。AlexNet 所用的影像是 227x227x3 RGB 影像,其架構使用了五層的 Convolution layer,其中最下面兩層 Convolution layer 都在其上疊加了 max pooling layer,最後連做了三層 convolution layer 後,才疊加一層 max-pooling layer。在訓練分類上,則在所有的 convolution + pooling layers 上,另外疊加了三層 fully-connected layer,包括了最後做分類的 softmax layer。這個網路的架構用了將近 6千萬(~60M)個參數,在當時算是相當深的架構,並已經運用了數個 GPU 做訓練。AlexNet 架構中,運用了 ReLU activtion function 於架構中,而使深度的類神經網路以梯度的方式訓練變為可能,並使它成為深度學習里程碑中一個代表性的架構。
VGG-16 的貢獻則是簡化原本 AlexNet 的架構,在不指數增加參數的情況下,使用較多的 convolution layer 以達到較高的準確率。VGG-16 架構使用了 224x224x3 RGB 影像做訓練,這裏的 16 代表的是網路架構包括了 16 層具有可訓練參數層(不包括 pooling layer),總共用了約十三億八千萬個參數(~138M)。另外一個為 VGG-19 的架構,在此架構中則用了 19 層的可訓練參數層,比起 VGG-16 又大了許多。
雖然 AlexNet 和 VGG 系列都提供了訓練深度類神經網路的可能性,然而其深度仍侷限在十多層的深度的架構中。主要的阻力則是來自於之前所提的 gradient vanishing 和 degradation 的問題。gradient vanishing 會造成梯度為零的情況,而導致反向傳播中所用的梯度方法無法收斂於一個最佳值,而 degradation 則來自於梯度無法反向傳遞,而造成誤差累積的情況,以至於愈深的網路其訓練效果愈差。
在 2016 年由中國的微軟中心何愷明(Kaimei He)博士提出的 Residual Neural Network 則能訓練深度達到數十層的深度。而 Residual Network (ResNet) 的秘密武器就是一個稱為 Residual Block 的架構,而下面的簡圖則是 Residual Block 的構造。
由上圖可知,一個 Residual Block 除了擁有和原本的 Network 架構相同的主架構,另外還有一個捷徑連結。這個捷徑連結會跳過一層線性轉換和非線性輸出,直接成為上兩層中 activation function 的輸入,因為這個捷徑連結,對來源層的輸出,提供了一個等同於 identity transform 或作直接拷貝的連結到非相鄰的目標層,減少了一層的轉換,所以又被稱為 skip connection。
在比較沒有 Residual Blocks 的類神經網路,或在發表 ResNet 架構的文獻中以 “plain” network 稱呼時,可以發現擁有 Residual Blocks 的 Residual Network 在 training error 的表現會逐漸降低 training error (下圖右)而沒有如 plain network 的 training degradation 問題(下圖左,略呈拋物線的曲線,標註為 reality)。
本圖取自於吳恩達教授的 Deep Learning Specialization @Coursera
Course #4 Convolution Network Week #2 ResNet Lecture。上圖是一個 plain network(不添加 skip connection,手繪藍線),和加了 skip connection 後的 Residual Network。左下圖是解說 plain network 的 degradation problem,理論上 training error 應該持續下降(標註為 theory 的曲線),卻逐漸上升(標註為 reality 的曲線)。而右下圖則是 Residual network 的表現,正如理論期待。
而 Residual Block 如何解決深層網路訓練誤差 degradation 的問題呢?根據吳恩達教授的解釋,透過 skip connection 直接拷貝的來源層輸出,若目標層其參數是不必要的,也就是在增加 regularization term 時,會將目標層的權重參數和偏移參數縮小至零,若少了拷貝來源層的輸出,則目標層的輸出變為零,而造成學習上的困難。但因為多了拷貝來源層的輸出,而使目標層輸出為來源層輸出的非線性轉換,也就是來源層輸出本身(見下圖)。
用一句更簡短的話來說明,那就是 Residual Block 解決了當逐漸加深網路時,gradient 不能回流下一層的問題。透過 skip connection,而使上層作 back-propagation 時,如果此層的參數逼近於零時,仍可以選擇捷徑的路徑,跳過此層,直接回流至來源層。
但,這個 skip connection 要在 CNN 中真正能運作,還需要一個小更改。那就是目標層和來源層的之間的 dimensionality 不一致的問題。這個 dimensionality 不一致問題,可能源自於不使用 “same” padding,而導致目標層的維度可能小於來源層的維度,此時就可以增加一個權重向量,對來源層的輸出做線性轉換,而與目標層的維度相同。如圖中最底端的公式。
下一篇文章中,我們將要介紹 Inception Network。就如李奧納多在電影《全面啟動》所言:「這還不足夠,我們得更深入...。」
除了電影全面啟動的圖片來自於A Simple Guide to the Versions of the Inception Network
和 ReLU 圖形來自於ReLU : Not a Differentiable Function: Why used in Gradient Based Optimization? and Other Generalizations of ReLU 外,其他的圖片皆來自吳恩達教授的課程投影片。